home *** CD-ROM | disk | FTP | other *** search
- Path: fido.asd.sgi.com!austern
- From: claus@faerber.muc.de (Claus A. Faerber)
- Newsgroups: comp.std.c++
- Subject: Re: Give operator. a chance
- Date: 05 Feb 1996 14:59:10 PST
- Organization: -
- Approved: austern@isolde.mti.sgi.com
- Message-ID: <62HLdPo3cDB@faerber.muc.de>
- NNTP-Posting-Host: isolde.mti.sgi.com
- X-Original-Date: Mon, 5 Feb 1996 01:00:00 +0100
- In-Reply-To: <3102AD11.1663@et.se>
- X-Mailer: CrossPoint v3.1 R/B17071
- X-Auth: PGPMoose V1.1 PGP comp.std.c++
- iQBVAwUBMRaL0Ey4NqrwXLNJAQHgKQH9G9ZiCYu4kbvigXppjwBEkCyhbyrwBWGq
- h8htHtxf66+saixZgQlqueXUlaBJNdwWWzlJgKCRhtA0hOQAUqA3Hg==
- =U0MR
- Originator: austern@isolde.mti.sgi.com
-
- IMO there's a better way than 'operator.()':
-
- Simply say: 'If a class member identifier is not found
- within an object, all possible cast operators are scanned in
- order to find a conversion to an object of a class
- containing a member with this identifier.'
-
- Eg.:
-
- class A{
- public: void A();
- void C();
- }
-
- class B{
- public:
- void B();
- void C();
- void D();
- }
-
- class C{
- A* pA;
- B* pB;
- public:
- void D();
-
- A& operator A&() { return *pA; };
- B& operator B&() { return *pB; };
- }
-
- //
-
- C c;
-
- c.A(); // calls ((A&)c).A();
- c.B(); // calls ((B&)c).B();
-
- c.C(); // calls ((A&)c).C();, as operator A& is first
-
- c.D(); // calls c.D();, as D() is already member of C
-
- Claus
-
- ------------------------------------------------------------------------
- Claus Andre Faerber - claus@faerber.muc.de - http://www.muc.de/~cfaerber
- ------------------------------------------------------------------------
- ---
- [ comp.std.c++ is moderated. Submission address: std-c++@ncar.ucar.edu.
- Contact address: std-c++-request@ncar.ucar.edu. The moderation policy is
- in http://reality.sgi.com/employees/austern_mti/std-c++/policy.html. ]
-